SnapKit简介
SnapKit能搞定什么
SnapKit是Masonry的Swift版,项目发布至今大约1年的时间,已经在github上有两千多个star,当然了,这其中也少不了"他爹"Masonry给他打的那些广告。
如果你还记得你在 StoryBoard 里面拉的那些线条,那你也一定记得其中 constriants 的表示方法:
SnapKit所做的就是这样一件事——让你这样写 constraints。
我们看看文章最顶部的那个需求用 SnapKit 如何实现:
view1.snp_makeConstraints { (make) -> Void in
make.top.equalTo(superview).offset(10)
make.left.equalTo(superview).offset(10)
make.bottom.equalTo(superview).offset(-10)
make.right.equalTo(superview).offset(-10)
}
对!就是这么简单!还可以更简单!!
view1.snp_makeConstraints { (make) -> Void in
make.edges.equalTo(superview).insets(UIEdgeInsetsMake(10, 10, 10, 10))
}
继续看还能怎么写:
// 不只是相等哦,大于等于也是有的
make.centerX.lessThanOrEqualTo(view2.snp_left)
make.left.greaterThanOrEqualTo(label.snp_left)
// 不止是边缘哦,宽度高度也是有的
// width >= 200 && width <= 400
make.width.greaterThanOrEqualTo(200)
make.width.lessThanOrEqualTo(400)
// 其实可以简单点,一行搞定一个size
make.size.equalTo(CGSizeMake(50, 100))
// 链式操作,优先级想怎么搞就怎么搞
make.left.greaterThanOrEqualTo(label.snp_left).priorityLow()
// 妈妈再也不担心我不会排版了,什么向左5像素向下10像素我一行代码就搞定啦
make.center.equalTo(superview).offset(CGPointMake(-5, 10))
做起动画来也是一把好手!
view1.snp_makeConstraints { (make) -> Void in
self.topConstraint = make.top.equalTo(superview).offset(padding.top).constraint
make.left.equalTo(superview).offset(padding.left)
}
// then later you can call
self.topConstraint.uninstall()
// or if you want to update the constraint
self.topConstraint.updateOffset(5)
// 也可以用 snp_updateConstraints 实现上述需求
用SnapKit做了下面这个界面:
体验之后发现,其实用SnapKit和原生constraints的代码行数差不多,但是每一行从原来的极为冗长的一坨东西,变成了很容易阅读和维护的短小精干的代码,代码像下面这样优雅,这便是SnapKit最大的作用。
mapView.snp_makeConstraints { (make) -> Void in
make.edges.equalTo(view)
}
locateImage.snp_makeConstraints { (make) -> Void in
let topHeight = navigationController!.navigationBar.frame.height + UIApplication.sharedApplication().statusBarFrame.height
make.centerX.equalTo(mapView)
make.bottom.equalTo(mapView.snp_centerY).offset(topHeight/2)
}
filterBtn.snp_makeConstraints { (make) -> Void in
make.left.equalTo(mapView).offset(15)
make.right.equalTo(mapView).offset(-15)
make.height.equalTo(40)
make.bottom.equalTo(mapView).offset(-15)
}
trackBtn.snp_makeConstraints { (make) -> Void in
make.bottom.equalTo(filterBtn.snp_top).offset(-15)
make.right.equalTo(mapView).offset(-15)
}
1.CocoaPods
pod 'SnapKit', :git => 'https://github.com/SnapKit/SnapKit.git', :branch => 'swift-2.0'
2.Framework
- 在Github上下载SnapKit,选择iOS target 编译(Command+B),找到SnapKit.framework
- 右键“Show In Finder”
- 把这个文件拖到我们的工程中
- 如图,两处进行设置
- 然后我们就可以没羞没臊的在Swift方便的使用这个类似Masonry的第三方库啦!
Tips:
下载下来的SnapKit中有一个CodeSnippets文件夹,把里面的东西复制到
~/Library/Developer/Xcode/UserData/CodeSnippets
即可以快捷构造SnapKit的Autolayout构造模版,提高开发效率!
如图: